home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / exampleCode / opengl / 2Dwrap / ogl / twodwrap.c < prev    next >
C/C++ Source or Header  |  1996-11-11  |  6KB  |  297 lines

  1. /*
  2.  * Copyright (c) 1995, Silicon Graphics, Inc.
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and
  5.  * its documentation for any purpose is hereby granted without fee, provided
  6.  * that the name of Silicon Graphics may not be used in any advertising or
  7.  * publicity relating to the software without the specific, prior written
  8.  * permission of Silicon Graphics.
  9.  *
  10.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
  11.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
  12.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  13.  *
  14.  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
  15.  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
  16.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE
  17.  * POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN
  18.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19.  *
  20.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  21.  */
  22. /*----------------------------------------------------------------------------
  23.  *
  24.  * porting layer for two d primitives, (arcs,rects,sbox) (irisGL to openGL)
  25.  * 
  26.  * Yusuf Attarwala
  27.  *
  28.  *---------------------------------------------------------------------------*/
  29.  
  30. #include <math.h>
  31. #include <GL/gl.h>                  /* openGL includes */
  32.  
  33. #include "twodwrap.h"
  34.  
  35. #define DTOR  0.017453             /* degrees to radians */
  36. #define DTOR10 0.0017453           /* DTOR by 10         */
  37.  
  38. #define ARCRES 20                  /* default arc resolution */
  39.  
  40. #define angleToRadian(a) a*DTOR10
  41.  
  42. void 
  43. arc (Coord x, Coord y, Coord radius, Angle start, Angle end)
  44. {
  45.     int i;
  46.     GLfloat angleS,angleE, incr;
  47.  
  48.     angleS = angleToRadian(start);
  49.     angleE = angleToRadian(end);
  50.     if (end < start) angleE += 2*M_PI;
  51.  
  52.     incr   = (angleE-angleS)/ARCRES;
  53.  
  54.     glBegin(GL_LINE_STRIP);
  55.     for (i=-1;i<ARCRES;i++) {
  56.     glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
  57.     angleS += incr;
  58.     }
  59.     glEnd();
  60. }
  61.  
  62. void 
  63. arcf(Coord x, Coord y, Coord radius, Angle start, Angle end)
  64. {
  65.     int i;
  66.     GLfloat angleS,angleE, incr;
  67.  
  68.     angleS = angleToRadian(start);
  69.     angleE = angleToRadian(end);
  70.     if (end < start) angleE += 2*M_PI;
  71.  
  72.     incr   = (angleE-angleS)/ARCRES;
  73.  
  74.     glBegin(GL_TRIANGLE_FAN);
  75.     glVertex2f(x,y);
  76.     for (i=-1;i<ARCRES;i++) {
  77.     glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
  78.     angleS += incr;
  79.     }
  80.     glEnd();
  81. }
  82.  
  83. void     
  84. arcfi( Icoord x, Icoord y, Icoord radius, Angle start, Angle end )
  85. {
  86.     arcf((Coord)x,(Coord)y,(Coord)radius,start,end);
  87. }
  88.  
  89. void     
  90. arcfs( Scoord x, Scoord y, Scoord radius, Angle start, Angle end)
  91. {
  92.     arcf((Coord)x,(Coord)y,(Coord)radius,start,end);
  93. }
  94.  
  95. void     
  96. arci( Icoord x, Icoord y, Icoord radius, Angle start, Angle end)
  97. {
  98.     arc((Coord)x,(Coord)y,(Coord)radius,start,end);
  99. }
  100.  
  101. void     
  102. arcs( Scoord x, Scoord y, Scoord radius, Angle start, Angle end)
  103. {
  104.     arc((Coord)x,(Coord)y,(Coord)radius,start,end);
  105. }
  106.  
  107. void 
  108. circ(Coord x, Coord y, Coord radius)
  109. {
  110.     int i;
  111.     GLfloat angleS, incr;
  112.  
  113.     angleS = 0.0;
  114.     incr   = (2*M_PI)/ARCRES;
  115.  
  116.     glBegin(GL_LINE_STRIP);
  117.     for (i=-1;i<ARCRES;i++) {
  118.     glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
  119.     angleS += incr;
  120.     }
  121.     glEnd();
  122. }
  123.  
  124. void 
  125. circf(Coord x, Coord y, Coord radius)
  126. {
  127.     int i;
  128.     GLfloat angleS, incr;
  129.  
  130.     angleS = 0.0;
  131.     incr   = (2*M_PI)/ARCRES;
  132.  
  133.     glBegin(GL_TRIANGLE_FAN);
  134.     glVertex2f(x,y);
  135.     for (i=-1;i<ARCRES;i++) {
  136.     glVertex2f(x + radius*cos(angleS), y + radius*sin(angleS));
  137.     angleS += incr;
  138.     }
  139.     glEnd();
  140. }
  141.  
  142. void     
  143. circfi( Icoord x, Icoord y, Icoord radius)
  144. {
  145.     circf((Coord)x,(Coord)y,(Coord)radius);
  146. }
  147.  
  148. void     
  149. circfs( Scoord x, Scoord y, Scoord radius)
  150. {
  151.     circf((Coord)x,(Coord)y,(Coord)radius);
  152. }
  153.  
  154. void     
  155. circi( Icoord x, Icoord y, Icoord radius)
  156. {
  157.     circ((Coord)x,(Coord)y,(Coord)radius);
  158. }
  159.  
  160. void     
  161. circs( Scoord x, Scoord y, Scoord radius)
  162. {
  163.     circ((Coord)x,(Coord)y,(Coord)radius);
  164. }
  165.  
  166. void     
  167. rect( Coord x1, Coord y1, Coord x2, Coord y2)
  168. {
  169.     glBegin(GL_LINE_LOOP);
  170.     glVertex2f(x1,y1);
  171.     glVertex2f(x2,y1);
  172.     glVertex2f(x2,y2);
  173.     glVertex2f(x1,y2);
  174.     glEnd();
  175. }
  176.  
  177. void     
  178. recti( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
  179. {
  180.     glBegin(GL_LINE_LOOP);
  181.     glVertex2i(x1,y1);
  182.     glVertex2i(x2,y1);
  183.     glVertex2i(x2,y2);
  184.     glVertex2i(x1,y2);
  185.     glEnd();
  186. }
  187.  
  188. void     
  189. rects( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
  190. {
  191.     glBegin(GL_LINE_LOOP);
  192.     glVertex2s(x1,y1);
  193.     glVertex2s(x2,y1);
  194.     glVertex2s(x2,y2);
  195.     glVertex2s(x1,y2);
  196.     glEnd();
  197. }
  198.  
  199. void     
  200. rectf( Coord x1, Coord y1, Coord x2, Coord y2)
  201. {
  202.     glBegin(GL_QUADS);
  203.     glVertex2f(x1,y1);
  204.     glVertex2f(x2,y1);
  205.     glVertex2f(x2,y2);
  206.     glVertex2f(x1,y2);
  207.     glEnd();
  208. }
  209.  
  210. void     
  211. rectfi( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
  212. {
  213.     glBegin(GL_QUADS);
  214.     glVertex2i(x1,y1);
  215.     glVertex2i(x2,y1);
  216.     glVertex2i(x2,y2);
  217.     glVertex2i(x1,y2);
  218.     glEnd();
  219. }
  220.  
  221. void     
  222. rectfs( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
  223. {
  224.     glBegin(GL_QUADS);
  225.     glVertex2s(x1,y1);
  226.     glVertex2s(x2,y1);
  227.     glVertex2s(x2,y2);
  228.     glVertex2s(x1,y2);
  229.     glEnd();
  230. }
  231.  
  232. void     
  233. sbox( Coord x1, Coord y1, Coord x2, Coord y2)
  234. {
  235.     glBegin(GL_LINE_LOOP);
  236.     glVertex2f(x1,y1);
  237.     glVertex2f(x2,y1);
  238.     glVertex2f(x2,y2);
  239.     glVertex2f(x1,y2);
  240.     glEnd();
  241. }
  242.  
  243. void     
  244. sboxi( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
  245. {
  246.     glBegin(GL_LINE_LOOP);
  247.     glVertex2i(x1,y1);
  248.     glVertex2i(x2,y1);
  249.     glVertex2i(x2,y2);
  250.     glVertex2i(x1,y2);
  251.     glEnd();
  252. }
  253.  
  254. void     
  255. sboxs( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
  256. {
  257.     glBegin(GL_LINE_LOOP);
  258.     glVertex2s(x1,y1);
  259.     glVertex2s(x2,y1);
  260.     glVertex2s(x2,y2);
  261.     glVertex2s(x1,y2);
  262.     glEnd();
  263. }
  264.  
  265. void     
  266. sboxf( Coord x1, Coord y1, Coord x2, Coord y2)
  267. {
  268.     glBegin(GL_QUADS);
  269.     glVertex2f(x1,y1);
  270.     glVertex2f(x2,y1);
  271.     glVertex2f(x2,y2);
  272.     glVertex2f(x1,y2);
  273.     glEnd();
  274. }
  275.  
  276. void     
  277. sboxfi( Icoord x1, Icoord y1, Icoord x2, Icoord y2)
  278. {
  279.     glBegin(GL_QUADS);
  280.     glVertex2i(x1,y1);
  281.     glVertex2i(x2,y1);
  282.     glVertex2i(x2,y2);
  283.     glVertex2i(x1,y2);
  284.     glEnd();
  285. }
  286.  
  287. void     
  288. sboxfs( Scoord x1, Scoord y1, Scoord x2, Scoord y2)
  289. {
  290.     glBegin(GL_QUADS);
  291.     glVertex2s(x1,y1);
  292.     glVertex2s(x2,y1);
  293.     glVertex2s(x2,y2);
  294.     glVertex2s(x1,y2);
  295.     glEnd();
  296. }
  297.